home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEffect / lastplayer.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-14  |  1.3 KB  |  82 lines

  1. #include <xsp2lib.h>
  2.  
  3. #include "../otoko.h"
  4. #include "../player.h"
  5. #include "../effect.h"
  6. #include "../priority.h"
  7.  
  8. static short EffectMoveLastPlayer (EFFECT *);
  9.  
  10.  
  11. void EffectInitLastPlayer (EFFECT * p)
  12. {
  13.     p->lx = p->x * 65536;
  14.     p->ly = p->y * 65536;
  15.     p->vx = 0;
  16.     p->vy = -2 * 65536;
  17.  
  18.     p->pt = obj_player + PLAYER_PT_CENTER;
  19.     p->info = PALET_PLAYER | PRIORITY_PLAYER;
  20.     p->seq = p->seq2 = 0;
  21.     p->func_effect_move = EffectMoveLastPlayer;
  22. }
  23.  
  24.  
  25.  
  26. static short EffectMoveLastPlayer (EFFECT * p)
  27. {
  28.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  29.     p->x = (p->lx += p->vx) >> 16;
  30.     p->y = (p->ly += p->vy) >> 16;
  31.  
  32.     switch (p->seq) {
  33.     case 0:        /* 上に上がる */
  34.         if (p->seq2++ >= 32) {
  35.             p->seq++;
  36.             p->seq2 = 0;
  37.             if (p->x < 144)
  38.                 p->pt--;
  39.             else
  40.                 p->pt++;
  41.         }
  42.         break;
  43.     case 1:
  44.         if (p->vy > 65536)
  45.             p->vy -= 4096;
  46.  
  47.         if (p->x < 144)
  48.             p->vx -= 4096;
  49.         else
  50.             p->vx += 4096;
  51.  
  52.         if (p->seq2++ > 8) {
  53.             p->seq++;
  54.             p->seq2 = 0;
  55.             if (p->x < 144)
  56.                 p->pt--;
  57.             else
  58.                 p->pt++;
  59.         }
  60.         break;
  61.     case 2:
  62.         if (p->vy > 65536)
  63.             p->vy -= 4096;
  64.  
  65.         if (p->x < 144) {
  66.             if (p->vx > -2 * 65536)
  67.                 p->vx -= 4096;
  68.             if (p->x < 0)
  69.                 return (-1);
  70.         } else {
  71.             if (p->vx < 2 * 65536)
  72.                 p->vx += 4096;
  73.             if (p->x > 256 + 16)
  74.                 return (-1);
  75.         }
  76.         break;
  77.     }
  78.     xobj_set_st (p);
  79.  
  80.     return (0);
  81. }
  82.